"""

@name:练习
@author:weihong
@projectname:sanchuang
"""

# lst = ['a', '1', '2bb', '234','','9']
# 使用reduce取出lst的数字 --》 12349
lst = ['a', '1', '2bb', '234','','9']
# digit = []
from functools import reduce
# for i in lst:
#     if i.isdigit():
#         digit.append(i)
# print(digit)
result = filter(lambda x:x.isdigit(),lst)
print(reduce(lambda x,y:x+y,list(result)))
# 12349

# print(sorted([True,Flase]))===>结果[False,True]
# Boolean 的排序会将 False 排在前，True排在后

# 有以下列表: list1=[7,-8,5, 4, 0,-2, -5]
# 正数在前负数在后
# 正数从小到大
# 负数从大到小
list1=[7,-8,5, 4, 0,-2, -5]
result = sorted(list1,key=lambda x:(x<=0,abs(x))) # 先根据正负排大小，0和负数为True，会排在后面，再根据绝对值的大小排序
print(result)
# [4, 5, 7, 0, -2, -5, -8]

# 这是一个字符串排序,排序规则:小写<大写<奇数<偶数
# S = 'asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
# 原理:先比较元组的第一个值，FALSE
S = 'asdf234GDSdsf23'
s2 = "".join(sorted(S, key=lambda x: (x.isdigit(),x.isupper(),x.isdigit() and int(x) % 2 == 0,x)))
# x.isdigit() 数字为True，会排在后面 ==》 字母<数字
# x.isupper() 大写为True，那么大写会在小写后面  ==》 小写<大写
# x.isdigit() and int(x) % 2 == 0 偶数为True，偶数排在后面   ==》 奇数<偶数
print(s2)
# addffssDGS33224